package com.hpin.mlxteacher.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.text.format.DateUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 常用工具类
 * 
 * @author Aaron
 * 
 */
public class CommonUtils {

	/**
	 * MD5加密
	 * 
	 * @param bytes
	 *            字节数组
	 * @return 加密后的值
	 */
	public static String toMd5(byte[] bytes) {
		try {
			MessageDigest algorithm = MessageDigest.getInstance("MD5");
			algorithm.reset();
			algorithm.update(bytes);
			return toHexString(algorithm.digest(), "");
		} catch (NoSuchAlgorithmException e) {
			Log.v("util", "toMd5():" + e);
			throw new RuntimeException(e);
		}
	}

	private static String toHexString(byte[] bytes, String separator) {
		StringBuilder hexString = new StringBuilder();
		for (byte b : bytes) {
			String hex = Integer.toHexString(0xFF & b);
			if (hex.length() == 1) {
				hexString.append('0');
			}
			hexString.append(hex).append(separator);
		}
		return hexString.toString();
	}

	/**
	 * 网络是否可用
	 * 
	 * @param context
	 * @return
	 */
	public static boolean isNetworkAvailable(Context context) {
		ConnectivityManager mgr = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo[] info = mgr.getAllNetworkInfo();
		if (info != null) {
			for (int i = 0; i < info.length; i++) {
				if (info[i].getState() == NetworkInfo.State.CONNECTED) {
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * 电话号码验证
	 * 
	 * @param str
	 * @return 验证通过返回true
	 */
	public static boolean isPhone(String str) {
		
		try {
			Pattern p = null;
			Matcher m = null;
			boolean b = false;
			p = Pattern.compile("^[0-9]{7,8}$|^1[3,4,5,7,8][0-9]{9}$"); // 验证手机号
																		// 和座机号
			m = p.matcher(str);
			b = m.matches();
			return b;
		} catch (Exception e) {
			
			return false;
		}
		
	
	}
	/**
	 * 获取当前时间
	 * 
	 * @param context
	 * @return
	 */
	public static String getCurrentTime(Context context) {
		// 刷新时间
		String time = DateUtils.formatDateTime(context,
				System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME
						| DateUtils.FORMAT_SHOW_DATE
						| DateUtils.FORMAT_ABBREV_ALL);
		return time;

	}
	
	
	/**
	 * 描述：获取表示当前日期时间的字符串.
	 * 
	 * @param format
	 *            格式化字符串，如："yyyy-MM-dd HH:mm:ss"
	 * @return String String类型的当前日期时间
	 */
	public static String getCurrentDate(String format) {
		String curDateTime = null;
		try {
			SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
			Calendar c = new GregorianCalendar();
			curDateTime = mSimpleDateFormat.format(c.getTime());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return curDateTime;

	}
	
	/**
	 * 是否为空
	 * @param str
	 * @return true为空 false 不为空
	 */
	public static boolean isNull (String str) {
		
		if (str == null) 
			return true;
		
		if ("".equals(str)) 
			return true;
		
		if ("null".equals(str)) 
			return true;
		
		return false;
	}
	
	/**
	 * 判断 字符串是否可以转为整形
	 * @param str
	 * @return true 为 可以  false 为不可以
	 */
	public static boolean isStr2Num(String str) {
		
		try {
			
			Integer.parseInt(str);
			
			return true;
		} catch (Exception e) {
			return false;
		}
	}

    /**
     * 获得屏幕的尺寸
     * @param ctx 上下文对象
     * @return 屏幕宽高的 数组  0位宽  1为高
     */
    public static int[] getScreenSize(Context ctx) {

        DisplayMetrics metric = new DisplayMetrics();
        WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metric);
        int width = metric.widthPixels;     // 屏幕宽度（像素）
        int height = metric.heightPixels;   // 屏幕高度（像素）
//        float density = metric.density;      // 屏幕密度（0.75 / 1.0 / 1.5）
//        int densityDpi = metric.densityDpi;  // 屏幕密度DPI（120 / 160 / 240）

        int[] sizes = {width, height};

        return sizes;
    }

    /**
     * 压缩图片
     * @param image
     * @return
     */
    public static byte[] compressByte(Bitmap image) {
        byte[] bytes = null;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 质量压缩100% 未压缩
        bytes = baos.toByteArray();
        try {
            baos.close();
        } catch (IOException e) {
            Log.v("图片压缩", e.getMessage());
        }
        return bytes;
    }
	
}
